//同以目录下的文件更名：
const fs = require("fs");
const path = require("path");
const os = require("os");
const { addAbortSignal } = require("stream");
const { start } = require("repl");
const { time } = require("console");
// 包含当前文件夹所有内容的数组
let allFiles = fs.readdirSync(__dirname);
// 更名操作
function my_rename(oldName, newName) {
  fs.rename(oldName, newName, function (err) {
    if (err) {
      throw err;
    }
    // console.log("rename is done!");
  });
}
// 验证结尾后缀是否为真。str文件的名字。appoint文件后缀的名字
function my_validationEnd(str, appoint) {
  // 不区分大小写全部转换成小写。
  str = str.toLowerCase();
  let tempArr = str.split(".");
  let endStr = tempArr[tempArr.length - 1];
  if (appoint === endStr) {
    return true;
  }
  return false;
}
// 过滤数组的方法，返回我想要的文件类型的数组。第一个参数文件数组。第二个参数后缀名，字符串。
function type_arr(arr, typeStr) {
  let newArr = [];
  for (let i in arr) {
    if (my_validationEnd(arr[i], typeStr)) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
// let stat = fs.lstatSync("新建文本文档 (3).txt");
// let stat2 = fs.lstatSync("a");
// console.log(my_isFold('新建文本文档 (3).txt')); //false
// console.log(my_isFold('a')); //true

// 判断是否文件夹
function my_isFold(fileOrFoldName) {
  return fs.lstatSync(fileOrFoldName).isDirectory();
}

// 获取文件的所有信息
function getFileMsg(file) {
  let msg = fs.statSync(file);
  let size = msg.size / 1024 / 1024;
  var re = /([0-9]+\.[0-9]{1})[0-9]*/;
  jieQu = size.toString().replace(re, "$1");
  size = jieQu + "MB";
  return {
    name: file,
    size: size,
    atime: msg.atime,
    mtime: msg.mtime,
    ctime: msg.ctime,
    birthtime: msg.birthtime,
  };
}
// getFileMsg('script_ouMeiFilefold文件夹的名字赋给mp4.js')
// console.log('文件大小', getFileMsg('script_ouMeiFilefold文件夹的名字赋给mp4.js'));
// 过滤数组，只留下文件夹的数组 arr一般是allFiles 我们这次用不到这个方法
function onlyFold_arr(arr = allFiles) {
  let newArr = [];
  for (let i in arr) {
    if (my_isFold(arr[i])) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
// 验证是否是数字 只能判断一位数
function isNum(num) {
  let pattern = /^[0-9]$/;
  /* let str='123'
    let str4='1'
    let str3='9'
    let str2='12a'
    console.log(pattern.test(str));
    console.log(pattern.test(str2));
    console.log(pattern.test(str3));
    console.log(pattern.test(str4)); */
  return pattern.test(num);
}
// 判断是否是小写 一位
function isLow(str) {
  let pattern = /^[a-z]$/;
  /* let str='123'
    let str4='1'
    let str3='9'
    let str2='12a'
    console.log(pattern.test(str));
    console.log(pattern.test(str2));
    console.log(pattern.test(str3));
    console.log(pattern.test(str4)); */
  return pattern.test(str);
}

// 把mySister.12.23.23改名为12.23.23.mySister
/* function my_rename_oumei(fileType = 'txt') {
    // 所有该格式文件的数组 一般是改mp4格式的
    // 这次不同了哦，是要留下所有文件夹的数组
    let typeArray = type_arr(allFiles, fileType);
    typeArray.forEach((item) => {
        // console.log('item',item);
        // item是每一个mp4的名字
        // 1By-Day.com_16.05.09.Stella.Cox.Intimate.Interview.Stella.Cox.Stiffens.Our.Cocks.XXX.IMAGES
        for (let i in item) {
            // console.log(item[i]);
            if ((isNum(item[i])) && (isNum(item[parseInt(i) + 1])) && (item[parseInt(i) + 2] === '.')) {
                // if ((isNum(item[i])) && (isNum(item[i + 1]))) {
                // if ((isNum(item[i]))) {
                // 找到了从左往右第一个数字
                if (isNum(item[parseInt(i) + 7]) || isNum(item[parseInt(i) + 8]) || isNum(item[parseInt(i) + 9])) {
                    let temp = ''
                    for (var j = 0; j < 8; j++) {
                        temp += item[parseInt(i) + j]
                    }
                    temp += '.1080Ph265shana.'
                    // console.log('temp',temp);
                    my_rename(item, temp + item)
                    console.log('oumei重命名完成！');
                    break
                }

            }
        }
    })
} */
// 快速排序 递归一定不要用Let，因为一旦除了作用域就失效了。不改变原数组
function my_quick_sort(arr) {
  if (arr.length < 2) return arr;
  let piIndex = Math.floor(arr.length / 2);
  //    拿走中间值
  let pi = arr.splice(piIndex, 1)[0];
  let left = [];
  let right = [];
  for (let i in arr) {
    if (arr[i] < pi) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return my_quick_sort(left).concat(pi, my_quick_sort(right));
}
let testarr = [1, 2, 2, 1, 5, 4, 0];
// console.log('我的快速',my_quick_sort(testarr));
// console.log('arr',testarr);
/* 别人写的
var quicksort = function (arr) {
    var length = arr.length;
    if (arr.length < 2) {
        return arr;
    }
    var leftArr = [];
    var rightArr = [];
    var pointIndex = parseInt(length / 2);
    var point = arr[pointIndex];
    for (var i = 0; i < length; i++) {
        if (i === pointIndex) {
            continue;
        }
        if (arr[i] < point) {
            leftArr.push(arr[i]);
        } else {
            rightArr.push(arr[i]);
        }
    }
    return quicksort(leftArr).concat(point, quicksort(rightArr));

}; */

// console.log('quick', quick_sort(testarr));
// console.log(testarr.splice(0,1),'testarr');//只有一项的数组
//这里的fileType压根就没用到，谁大小最大，就以哪个文件为准
const { basename } = require('path')
let proPath = __dirname // 路径 "/Users/yangxin/code/lib"
// basename(proPath) // 返回结果 lib
// console.log(111111,basename(proPath));//Compressed
// console.log(222222,basename);//[Function: basename]
// console.log(333333,proPath);//C:\Users\Carlos\Downloads\Compressed
let msgStr = "此文件夹名字："+basename(proPath)+os.EOL;

function myFileMsgToTxt(fileType = "txt") {
  // 文件夹名字的数组 os.EOL是换行符号 就等于'\n'
  allFiles.forEach((item, index) => {
    itemMsg = getFileMsg(item);
    msgStr += os.EOL + itemMsg.name + os.EOL + itemMsg.size + os.EOL;
    msgStr += "创建时间：" + itemMsg.birthtime + os.EOL + "修改时间：" + itemMsg.ctime + os.EOL;
  });
  // console.log("文件信息msgStr", msgStr);
  // fold就是每一个文件夹
  /* foldArr.forEach((fold) => {
    // console.log(path.join(__dirname, fold), '路径名');
    let pathName = path.join(__dirname, fold); //E:\projects\node_practice\script-jiaoBen\test\新建文件夹
    //文件夹里面的每一个文件
    let foldFiles = fs.readdirSync(pathName);
    // console.log(foldFiles);//这是一个数组 文件夹里面每个文件组成的数组
    // 我们来一个排序 按照文件大小
    let sizeArr = [];
    // console.log(getFileMsg('./新建文件夹/新建文本文档.txt'));
    // console.log('路径',path.join(__dirname, fold));
    // return
    foldFiles.forEach((file) => {
      // getFileMsg方法拿到一个对象name和size
      sizeArr.push(getFileMsg(path.join(pathName, file)));
    });
    // console.log('size', sizeArr);
    // return
    let maxIndex = 0;
    let max = 0;
    for (var i = 0; i < sizeArr.length; i++) {
      // console.log('比了一次');
      if (sizeArr[i].size > max) {
        // console.log('大');
        maxIndex = i;
        max = sizeArr[i].size;
      }
    }
    console.log("最大值和下标", max / (1024 * 1024) + "mb", maxIndex);
    // console.log('文件夹名字',fold);
    // console.log('end',path.join(pathName,foldFiles[maxIndex]));// E:\projects\node_practice\script-jiaoBen\test\新建文件夹\新建文本文档1 (2) - 副本.txt
    // 找到后缀名
    let tempIndex = foldFiles[maxIndex].lastIndexOf(".");
    let suffix = foldFiles[maxIndex].slice(tempIndex);
    // console.log('suf',suffix);//.txt
    // return
    my_rename(path.join(pathName, foldFiles[maxIndex]), path.join(pathName, fold + "" + suffix));
    console.log("重命名成功！已和文件夹名字保持了一致！");
  }); */
}
myFileMsgToTxt();



// 把我要的JS格式的文件全部追加复制到一个新的文件里面。目录，格式，新文件名字
function my_appendFile(newFile, str) {
  fs.appendFileSync(newFile, str);
  // console.log(newFile, str);
  console.log("已经将打印出该文件里所有文件的重要信息到txt中！");
}
my_appendFile("1此文件夹里面所有文件的具体信息.txt", msgStr);
